/**
 * SFC 开发前置检查脚本
 *
 * 此脚本用于检查单文件组件（SFC）相关的核心包是否已正确构建。
 * 这些包必须在 SFC 相关开发工具（如 playground）啟动之前先构建完成。
 * 如果任何一个包的构建产物不存在，脚本会以错误状态退出。
 *
 * @ts-check
 */
import fs from 'node:fs'

/**
 * 需要检查的核心包列表
 * 这些包都是 SFC 编译和处理流程中的关键组件：
 * - compiler-sfc: 单文件组件编译器，处理 .vue 文件
 * - compiler-core: 编译器核心，提供 AST 解析和转换功能
 * - compiler-dom: DOM 特定的编译器功能
 * - compiler-ssr: 服务端渲染编译器
 * - shared: 共享工具函数和常量
 */
const packagesToCheck = [
  'compiler-sfc',
  'compiler-core',
  'compiler-dom',
  'compiler-ssr',
  'shared',
]

// 标记所有文件是否都存在
let allFilesPresent = true

/**
 * 检查每个包的 CommonJS 构建产物是否存在
 * 如果任何一个文件不存在，将 allFilesPresent 设为 false 并立即退出循环
 */
for (const pkg of packagesToCheck) {
  if (
    !fs.existsSync(
      new URL(`../packages/${pkg}/dist/${pkg}.cjs.js`, import.meta.url),
    )
  ) {
    allFilesPresent = false
    break
  }
}

/**
 * 如果有任何文件缺失，以错误状态退出
 * 这会阻止依赖这些构建产物的工具启动
 */
if (!allFilesPresent) {
  process.exit(1)
}
